home *** CD-ROM | disk | FTP | other *** search
- // Template file v5.202 (02/20/02)
- ////////////////////////////////////////////////////////////////////////
- // File: menu.wdl
- // WDL prefabs for simple game menus
- ////////////////////////////////////////////////////////////////////////
- //
-
-
-
- ////////////////////////////////////////////////////////////////////////
- //
- ////////////////////////////////////////////////////////////////////////
-
- IFNDEF MENU_DEFS;
- SOUND menu_click <click.wav>; // menu select sound
- DEFINE menu_font standard_font; // menu font
- BMAP button_low,<black.pcx>,0,0,64,10;// menu item background
- BMAP button_hi,<white.pcx>,0,0,64,10; // menu selected item background
- BMAP yesno_back,<black.pcx>,0,0,64,24;// yes/no panel background
- BMAP yesno_low,<black.pcx>,0,0,28,10; // yes/no button background
- BMAP yesno_hi,<white.pcx>,0,0,28,10; // yes/no selected button background
- BMAP arrow,<arrow.pcx>;// mouse pointer
- DEFINE YES_OFFS_X,2; // offsets for yes/no buttons to panel
- DEFINE NO_OFFS_X,34;
- DEFINE YESNO_OFFS_Y,12;
- ENDIF; // MENU_DEFS
-
- IFNDEF MENU_DEFS2;
- DEFINE CONSOLE_MODE_2; // console line don't disappear after [ENTER]
- DEFINE INFO_NAME,"stat";
- DEFINE SAVE_NAME,"game";
- ENDIF;
- //////////////////////////////////////////////////////////
- // legacy skills to be preserved on score loading & level change
- SKILL SOUND_VOL = { TYPE GLOBAL; VAL 100; }
- SKILL MIDI_VOL = { TYPE GLOBAL; VAL 50; }
-
- //////////////////////////////////////////////////////////
- var menu_pos[2] = 10, 10; // position of menu on screen
- var menu_dist[2] = 4, 12; // distance between buttons
- var menu_offs[2] = 2, 1; // offset text to button below
- var menu_max = 7; // max items per menu
-
- var yesno_pos[2] = 10, 10; // position of yes/no panel
- var yesno_offs[2] = 2, 2; // offset text to panel
-
- //////////////////////////////////////////////////////////
- // Texts and messages appearing in the menu
- STRING new_game_str," ";
- STRING load_game_str,"Load";
- STRING save_game_str,"Save";
- STRING quit_game_str,"Quit";
- STRING options_str,"Options";
- STRING help_str,"Help";
- STRING resume_str,"Back";
-
- STRING yes_str,"Yes";
- STRING no_str," No";
-
- STRING quit_yesno," Quit?";
-
- STRING ok_str,"OK";
- STRING wait_str,"Please wait...";
- STRING save_error,"MALFUNCTION... can't save game";
- STRING load_error,"MALFUNCTION... save before loading!";
-
- STRING helptxt_str,
- "ESC - Menu
- F1 - Help
- F2 - Quicksave
- F3 - Quickload
- F4 - Multiplayer message
- F5 - Toggle resolution
- F6 - Screenshot
- F7 - Toggle person mode
- F11 - Toggle gamma
- F12 - Toggle sound/music
- F10 - Exit";
-
- //////////////////////////////////////////////////////////
- // a lot of default strings, actions and pointers
- // which are used for the items of the menu
-
- var menu_cursor = 0; // determines which item is selected
-
- // strings for the names of the five games to save and load
- STRING name1_str," ";
- STRING name2_str," ";
- STRING name3_str," ";
- STRING name4_str," ";
- STRING name5_str," ";
-
- string* mystring;
-
- // pointers to the actions to execute for each of the 7 menu items
- action* menu_do1;
- action* menu_do2;
- action* menu_do3;
- action* menu_do4;
- action* menu_do5;
- action* menu_do6;
- action* menu_do7;
-
- // pointers to save and restore any actions that were
- // previously assigned to menu keys
- action* old_menu_esc;
- action* old_help_esc;
- action* old_yesno_esc;
- action* old_menu_enter;
- action* old_yesno_enter;
- action* old_cud;
- action* old_cuu;
- action* old_cul;
- action* old_cur;
- action* old_f1;
-
- // Actions which are really performed if clicking one of the 7 menu items.
- // The menu has to disappear before the action is executed
- function _b1() { _menu_clear(); menu_do1(); }
- function _b2() { _menu_clear(); menu_do2(); }
- function _b3() { _menu_clear(); menu_do3(); }
- function _b4() { _menu_clear(); menu_do4(); }
- function _b5() { _menu_clear(); menu_do5(); }
- function _b6() { _menu_clear(); menu_do6(); }
- function _b7() { _menu_clear(); menu_do7(); }
-
- function _buttonclick() { PLAY_SOUND menu_click,40; }
-
- // Texts on the menu item buttons
- TEXT menu_txt1 { LAYER 11; FONT menu_font; STRING empty_str; }
- TEXT menu_txt2 { LAYER 11; FONT menu_font; STRING empty_str; }
- TEXT menu_txt3 { LAYER 11; FONT menu_font; STRING empty_str; }
- TEXT menu_txt4 { LAYER 11; FONT menu_font; STRING empty_str; }
- TEXT menu_txt5 { LAYER 11; FONT menu_font; STRING empty_str; }
- TEXT menu_txt6 { LAYER 11; FONT menu_font; STRING empty_str; }
- TEXT menu_txt7 { LAYER 11; FONT menu_font; STRING empty_str; }
-
- // The items of which the menu really consists.
- // Each item is a panel with a single button.
- PANEL menu_pan1
- {
- LAYER 10; FLAGS REFRESH,TRANSPARENT;
- BUTTON 0,0,button_hi,button_low,button_hi,_b1,NULL,_buttonclick;
- }
- PANEL menu_pan2
- {
- LAYER 10; FLAGS REFRESH,TRANSPARENT;
- BUTTON 0,0,button_hi,button_low,button_hi,_b2,NULL,_buttonclick;
- }
- PANEL menu_pan3
- {
- LAYER 10; FLAGS REFRESH,TRANSPARENT;
- BUTTON 0,0,button_hi,button_low,button_hi,_b3,NULL,_buttonclick;
- }
- PANEL menu_pan4
- {
- LAYER 10; FLAGS REFRESH,TRANSPARENT;
- BUTTON 0,0,button_hi,button_low,button_hi,_b4,NULL,_buttonclick;
- }
- PANEL menu_pan5
- {
- LAYER 10; FLAGS REFRESH,TRANSPARENT;
- BUTTON 0,0,button_hi,button_low,button_hi,_b5,NULL,_buttonclick;
- }
- PANEL menu_pan6
- {
- LAYER 10; FLAGS REFRESH,TRANSPARENT;
- BUTTON 0,0,button_hi,button_low,button_hi,_b6,NULL,_buttonclick;
- }
- PANEL menu_pan7
- {
- LAYER 10; FLAGS REFRESH,TRANSPARENT;
- BUTTON 0,0,button_hi,button_low,button_hi,_b7,NULL,_buttonclick;
- }
-
- PANEL menu_select
- {
- LAYER 10.5; BMAP button_hi; FLAGS REFRESH,TRANSPARENT;
- }
-
- /////////////////////////////////////////////////////////////////////
- // This action initializes the menu
- // This just makes all menu items - buttons and texts above - visible on screen.
- function _menu_visible()
- {
- if(menu_max >= 1)
- {
- menu_pan1.VISIBLE = ON;
- menu_txt1.VISIBLE = ON;
- }
- if(menu_max >= 2)
- {
- menu_pan2.VISIBLE = ON;
- menu_txt2.VISIBLE = ON;
- }
- if(menu_max >= 3)
- {
- menu_pan3.VISIBLE = ON;
- menu_txt3.VISIBLE = ON;
- }
- if(menu_max >= 4)
- {
- menu_pan4.VISIBLE = ON;
- menu_txt4.VISIBLE = ON;
- }
- if(menu_max >= 5)
- {
- menu_pan5.VISIBLE = ON;
- menu_txt5.VISIBLE = ON;
- }
- if(menu_max >= 6)
- {
- menu_pan6.VISIBLE = ON;
- menu_txt6.VISIBLE = ON;
- }
- if(menu_max >= 7)
- {
- menu_pan7.VISIBLE = ON;
- menu_txt7.VISIBLE = ON;
- }
- FREEZE_MODE = 1; // when the menu is on screen, the game freezes
- menu_cursor = 1; // place to first item
- }
-
-
- // This just lets all menu items disappear again
- function _menu_hide()
- {
- menu_pan1.VISIBLE = OFF;
- menu_txt1.VISIBLE = OFF;
- menu_pan2.VISIBLE = OFF;
- menu_txt2.VISIBLE = OFF;
- menu_pan3.VISIBLE = OFF;
- menu_txt3.VISIBLE = OFF;
- menu_pan4.VISIBLE = OFF;
- menu_txt4.VISIBLE = OFF;
- menu_pan5.VISIBLE = OFF;
- menu_txt5.VISIBLE = OFF;
- menu_pan6.VISIBLE = OFF;
- menu_txt6.VISIBLE = OFF;
- menu_pan7.VISIBLE = OFF;
- menu_txt7.VISIBLE = OFF;
- menu_select.VISIBLE = OFF;
- }
-
- // This quits the menu, restores old key actions, and continues the game
- function _menu_clear()
- {
- if(menu_cursor > 0)
- {
- _menu_hide();
- ON_ESC = old_menu_esc;
- ON_CUU = old_cuu;
- ON_CUD = old_cud;
- ON_ENTER = old_menu_enter;
- FREEZE_MODE = 0;
- menu_cursor = 0;
- }
- }
-
- // One item up
- function _menu_up()
- {
- menu_cursor -= 1;
- _menu_set();
- }
-
- // One item down
- function _menu_down()
- {
- menu_cursor += 1;
- _menu_set();
- }
-
- // Highlights the selected menu item, onto which the menu cursor is placed
- function _menu_set()
- {
- // cursor highlight has no effect in mouse mode
- if(MOUSE_MODE >= 1) { menu_select.VISIBLE = OFF; RETURN; }
-
- // restrict the menu cursor to valid values
- if(menu_cursor < 1) { menu_cursor = menu_max; }
- if(menu_cursor > menu_max) { menu_cursor = 1; }
-
- // set the highlight panel onto the selected item, and make it visible
- menu_select.POS_X = menu_pos.X + (menu_cursor-1) * menu_dist.X;
- menu_select.POS_Y = menu_pos.Y + (menu_cursor-1) * menu_dist.Y;
- menu_select.VISIBLE = ON;
- _buttonclick();
- }
-
- // Desc: exceutes the action of the selected menu item
- function _menu_exec()
- {
- // if alt or ctrl was pressed, don't execute the menu but the old action
- if(KEY_ALT || KEY_CTRL) { old_menu_enter(); return; }
-
- // now ececute the item action, dependent on the menu cursor position
- play_sound(menu_click,60);
- if(menu_cursor == 1) { _b1(); return; }
- if(menu_cursor == 2) { _b2(); return; }
- if(menu_cursor == 3) { _b3(); return; }
- if(menu_cursor == 4) { _b4(); return; }
- if(menu_cursor == 5) { _b5(); return; }
- if(menu_cursor == 6) { _b6(); return; }
- if(menu_cursor == 7) { _b7(); return; }
- }
-
- function menu_show()
- {
- _yesno_hide(); // if a yesno panel was active, hide it
-
- // First, set all button panels to their correct positions
- menu_pan1.POS_X = menu_pos.X;
- menu_pan1.POS_Y = menu_pos.Y;
- menu_txt1.POS_X = menu_pos.X + menu_offs.X;
- menu_txt1.POS_Y = menu_pos.Y + menu_offs.Y;
- menu_pan2.POS_X = menu_pan1.POS_X + menu_dist.X;
- menu_pan2.POS_Y = menu_pan1.POS_Y + menu_dist.Y;
- menu_txt2.POS_X = menu_txt1.POS_X + menu_dist.X;
- menu_txt2.POS_Y = menu_txt1.POS_Y + menu_dist.Y;
- menu_pan3.POS_X = menu_pan2.POS_X + menu_dist.X;
- menu_pan3.POS_Y = menu_pan2.POS_Y + menu_dist.Y;
- menu_txt3.POS_X = menu_txt2.POS_X + menu_dist.X;
- menu_txt3.POS_Y = menu_txt2.POS_Y + menu_dist.Y;
- menu_pan4.POS_X = menu_pan3.POS_X + menu_dist.X;
- menu_pan4.POS_Y = menu_pan3.POS_Y + menu_dist.Y;
- menu_txt4.POS_X = menu_txt3.POS_X + menu_dist.X;
- menu_txt4.POS_Y = menu_txt3.POS_Y + menu_dist.Y;
- menu_pan5.POS_X = menu_pan4.POS_X + menu_dist.X;
- menu_pan5.POS_Y = menu_pan4.POS_Y + menu_dist.Y;
- menu_txt5.POS_X = menu_txt4.POS_X + menu_dist.X;
- menu_txt5.POS_Y = menu_txt4.POS_Y + menu_dist.Y;
- menu_pan6.POS_X = menu_pan5.POS_X + menu_dist.X;
- menu_pan6.POS_Y = menu_pan5.POS_Y + menu_dist.Y;
- menu_txt6.POS_X = menu_txt5.POS_X + menu_dist.X;
- menu_txt6.POS_Y = menu_txt5.POS_Y + menu_dist.Y;
- menu_pan7.POS_X = menu_pan6.POS_X + menu_dist.X;
- menu_pan7.POS_Y = menu_pan6.POS_Y + menu_dist.Y;
- menu_txt7.POS_X = menu_txt6.POS_X + menu_dist.X;
- menu_txt7.POS_Y = menu_txt6.POS_Y + menu_dist.Y;
-
- // Now save the old actions of ESC, Cursor, ENTER keys into pointers
- // and assign them them new actions required for the menu
- old_menu_esc = ON_ESC;
- ON_ESC = _menu_clear; // now ESC clears the menu
- old_cuu = ON_CUU;
- on_cuu = _menu_up; // CUU moves the selection cursor up
- old_cud = ON_CUD;
- on_cud = _menu_down; // CUD moves it down
- old_menu_enter = ON_ENTER;
- ON_ENTER = _menu_exec;// and ENTER ececutes the selected item
-
- // and now place the menu cursor to the first item, and make the
- // whole menu visible.
- _menu_visible();
- _menu_set(); // highlight first item
- }
-
- ///////////////////////////////////////////////////////////////////////
- // Yes/No Panel stuff
- var yesno_active = 0;
-
- // For saving and restoring the old key actions
- action* old_y;
- action* old_z;
- action* old_n;
-
- // Action to execute if YES is clicked on
- action* yesno_do;
- function _yes_exec() { _yesno_clear(); yesno_do(); }
-
- // The yes/no panel consists of 2 buttons, not surprisingly
- PANEL yesno_pan
- {
- LAYER 12; BMAP yesno_back; FLAGS TRANSPARENT,REFRESH;
- BUTTON YES_OFFS_X,YESNO_OFFS_Y,yesno_hi,yesno_low,yesno_hi,
- _yes_exec,NULL,_buttonclick;
- BUTTON NO_OFFS_X,YESNO_OFFS_Y,yesno_hi,yesno_low,yesno_hi,
- _yesno_clear,NULL,_buttonclick;
- }
-
- // Texts of the panel and the two buttons
- TEXT yesno_txt { LAYER 13; FONT menu_font; STRING empty_str; }
- TEXT yes_txt { LAYER 13; FONT menu_font; STRING yes_str; }
- TEXT no_txt { LAYER 13; FONT menu_font; STRING no_str; }
-
- ///////////////////////////////////////////////////////////////////////
- // Initialzes the yesno panel
- function yesno_show()
- {
- _menu_clear(); // in case menu was switched on before
- _yesno_clear(); // remove last yesno
-
- // set the position of yesno panels and text
- yesno_pan.POS_X = yesno_pos.X;
- yesno_pan.POS_Y = yesno_pos.Y;
- yesno_txt.POS_X = yesno_pan.POS_X + yesno_offs.X;
- yesno_txt.POS_Y = yesno_pan.POS_Y + yesno_offs.Y;
- yes_txt.POS_X = yesno_txt.POS_X + YES_OFFS_X;
- yes_txt.POS_Y = yesno_txt.POS_Y + YESNO_OFFS_Y;
- no_txt.POS_X = yesno_txt.POS_X + NO_OFFS_X;
- no_txt.POS_Y = yes_txt.POS_Y;
-
- // let everything appear on screen
- yesno_pan.VISIBLE = ON;
- yesno_txt.VISIBLE = ON;
- yes_txt.VISIBLE = ON;
- no_txt.VISIBLE = ON;
-
- // Save the old key actions, and set the reqired panel actions
- old_yesno_esc = ON_ESC;
- ON_ESC = _yesno_clear;
- old_n = ON_N;
- ON_N = _yesno_clear;
- old_yesno_enter = ON_ENTER;
- ON_ENTER = _yes_exec;
- old_y = ON_Y;
- ON_Y = _yes_exec;
- old_z = ON_Z; // for German keyboard...
- ON_Z = _yes_exec;
-
- yesno_active = 1;
- FREEZE_MODE = 1; // freeze game
- }
-
- // let the yesno panel disappear
- function _yesno_hide()
- {
- yesno_pan.VISIBLE = OFF;
- yesno_txt.VISIBLE = OFF;
- yes_txt.VISIBLE = OFF;
- no_txt.VISIBLE = OFF;
- }
-
- // exit the yesno panel
- function _yesno_clear()
- {
- if (yesno_active)
- {
- _yesno_hide();
- FREEZE_MODE = 0; // unfreeze game
- // restore old key actions
- ON_ESC = old_yesno_esc;
- ON_N = old_n;
- ON_ENTER = old_yesno_enter;
- ON_Y = old_y;
- ON_Z = old_z;
- yesno_active = 0;
- }
- }
-
- ///////////////////////////////////////////////////////////////////////
- // Options sliders stuff
- DEFINE SLIDER_LEN,70;
-
- BMAP slider_map,<white.pcx>,0,0,10,10;
- BMAP slider_bar,<black.pcx>,0,0,SLIDER_LEN,2;
-
- var bar_val1 = SLIDER_LEN;
- var bar_val2 = SLIDER_LEN; }
- var bar_val3 = SLIDER_LEN; }
- var slider_soundvol = 80;// 0, 100;
- var slider_musicvol = 50;//, 0, 100;
- var slider_resolution = 3;//, 1, 8;
-
- PANEL option_pan
- {
- LAYER 10; FLAGS REFRESH;
- HBAR 4,8,SLIDER_LEN,slider_bar,1,bar_val1; // just to draw a black line
- HSLIDER 4,4,SLIDER_LEN,slider_map,0,100,slider_soundvol;
-
- HBAR 4,28,SLIDER_LEN,slider_bar,1,bar_val2;
- HSLIDER 4,24,SLIDER_LEN,slider_map,0,100,slider_musicvol;
-
- HBAR 4,48,SLIDER_LEN,slider_bar,1,bar_val3;
- HSLIDER 4,44,SLIDER_LEN,slider_map,1,8,slider_resolution;
- }
-
- STRING optionsound_str,"- volume +";
- STRING optionmusic_str,"- music +";
- STRING optionres_str, "- video +";
-
-
- // move the cursor one slider up
- function _slider_up()
- {
- if(MOUSE_MODE != 0) { RETURN; }
- _buttonclick();
- menu_cursor -= 1;
- if(menu_cursor < 1) { menu_cursor = 3; }
- }
-
- // move the cursor one slider down
- function _slider_down()
- {
- if(MOUSE_MODE != 0) { RETURN; }
- _buttonclick();
- menu_cursor += 1;
- if(menu_cursor > 3) { menu_cursor = 1; }
- }
-
- // move selected slider to right
- function _slider_right()
- {
- if(MOUSE_MODE != 0) { RETURN; }
- _buttonclick();
- if(menu_cursor == 1)
- {
- slider_soundvol += 10;
- if(slider_soundvol > 100) { slider_soundvol = 100; }
- }
- if(menu_cursor == 2)
- {
- slider_musicvol += 10;
- if(slider_musicvol > 100) { slider_musicvol = 100; }
- }
- if(menu_cursor == 3)
- {
- slider_resolution += 1;
- if(slider_resolution > 8) { slider_resolution = 8; }
- }
- }
-
- // move selected slider to left
- function _slider_left()
- {
- if(MOUSE_MODE != 0) { RETURN; }
- _buttonclick();
- if(menu_cursor == 1)
- {
- slider_soundvol -= 10;
- if(slider_soundvol < 0) { slider_soundvol = 0; }
- }
- if(menu_cursor == 2) {
- slider_musicvol -= 10;
- if(slider_musicvol < 0) { slider_musicvol = 0; }
- }
- if(menu_cursor == 3)
- {
- slider_resolution -= 1;
- if(slider_resolution < 1) { slider_resolution = 1; }
- }
- }
-
- function options_hide()
- {
- if(slider_resolution != VIDEO_MODE)
- {
- SWITCH_VIDEO slider_resolution,0,0;
- slider_resolution = VIDEO_MODE;
- _show_resolution();
- }
- FREEZE_MODE = 0;
- option_pan.VISIBLE = OFF;
- menu_txt1.VISIBLE = OFF;
- menu_txt2.VISIBLE = OFF;
- menu_txt3.VISIBLE = OFF;
- ON_ESC = old_menu_esc;
- ON_CUU = old_cuu;
- ON_CUD = old_cud;
- ON_CUL = old_cul;
- ON_CUR = old_cur;
- }
-
- // Yet to do: modularize a slider panel
- function game_options()
- {
- EXCLUSIVE_GLOBAL;
- FREEZE_MODE = 1;
- option_pan.POS_X = menu_pos.X;
- option_pan.POS_Y = menu_pos.Y;
- menu_txt1.POS_X = menu_pos.X + 2;
- menu_txt1.POS_Y = menu_pos.Y + 15;
- menu_txt2.POS_X = menu_txt1.POS_X;
- menu_txt2.POS_Y = menu_txt1.POS_Y + 20;
- menu_txt3.POS_X = menu_txt2.POS_X;
- menu_txt3.POS_Y = menu_txt2.POS_Y + 20;
- option_pan.VISIBLE = ON;
- menu_txt1.VISIBLE = ON;
- menu_txt2.VISIBLE = ON;
- menu_txt3.VISIBLE = ON;
- menu_txt1.STRING = optionsound_str;
- menu_txt2.STRING = optionmusic_str;
- menu_txt3.STRING = optionres_str;
- old_menu_esc = ON_ESC;
- ON_ESC = options_hide;
- old_cuu = ON_CUU;
- ON_CUU = _slider_up;
- old_cud = ON_CUD;
- ON_CUD = _slider_down;
- old_cul = ON_CUL;
- ON_CUL = _slider_left;
- old_cur = ON_CUR;
- ON_CUR = _slider_right;
-
- menu_cursor = 1;
- slider_soundvol = SOUND_VOL;
- slider_musicvol = MIDI_VOL;
- slider_resolution = VIDEO_MODE;
-
- while(option_pan.VISIBLE == ON)
- {
- if(MOUSE_MODE == 0)
- {
- if(menu_cursor == 1)
- {
- if(bar_val1 == 0)
- {
- bar_val1 = SLIDER_LEN;
- }
- else
- {
- bar_val1 = 0;
- }
- bar_val2 = SLIDER_LEN;
- bar_val3 = SLIDER_LEN;
- }
- if(menu_cursor == 2)
- {
- if(bar_val2 == 0)
- {
- bar_val2 = SLIDER_LEN;
- }
- else
- {
- bar_val2 = 0;
- }
- bar_val1 = SLIDER_LEN;
- bar_val3 = SLIDER_LEN;
- }
- if(menu_cursor == 3)
- {
- if(bar_val3 == 0)
- {
- bar_val3 = SLIDER_LEN;
- }
- else
- {
- bar_val3 = 0;
- }
- bar_val2 = SLIDER_LEN;
- bar_val1 = SLIDER_LEN;
- }
- }
- else
- {
- bar_val1 = SLIDER_LEN;
- bar_val2 = SLIDER_LEN;
- bar_val3 = SLIDER_LEN;
- }
- SOUND_VOL = slider_soundvol;
- MIDI_VOL = slider_musicvol;
- wait(1);
- }
- }
-
- ///////////////////////////////////////////////////////////////////////
- // save/load stuff
- var slot = 0; // number of last score
- function _menu_save1() { slot = 1; mystring = name1_str; _game_save(); }
- function _menu_save2() { slot = 2; mystring = name2_str; _game_save(); }
- function _menu_save3() { slot = 3; mystring = name3_str; _game_save(); }
- function _menu_save4() { slot = 4; mystring = name4_str; _game_save(); }
- function _menu_save5() { slot = 5; mystring = name5_str; _game_save(); }
-
- function _menu_save()
- {
- menu_txt1.STRING = name1_str;
- menu_txt2.STRING = name2_str;
- menu_txt3.STRING = name3_str;
- menu_txt4.STRING = name4_str;
- menu_txt5.STRING = name5_str;
- menu_txt6.STRING = resume_str;
-
- menu_do1 = _menu_save1;
- menu_do2 = _menu_save2;
- menu_do3 = _menu_save3;
- menu_do4 = _menu_save4;
- menu_do5 = _menu_save5;
- menu_do6 = _menu_clear;
-
- menu_max = 6;
- menu_show();
- }
-
-
- function load_status()
- {
- wait(2); // don't override previous LOAD etc.
- LOAD_INFO INFO_NAME,0;
- }
-
- function _game_save()
- {
- _menu_visible(); // was hidden before
- INKEY mystring;
- if(RESULT != 13) { _menu_clear(); return; }
- _menu_clear();
- save_status(); // save global skills & strings
- ON_LOAD = load_status; // to automatically reload them
-
- // msg.STRING = wait_str;
- // show_message();
-
- save(SAVE_NAME,slot); // save game
- if(RESULT < 0)
- { // Error?
- msg.STRING = save_error;
- }
- else
- {
- msg.STRING = ok_str;
- }
- show_message();
- }
-
-
- // after re-loading a game, reload all global parameters
- function save_status()
- {
- save_info(INFO_NAME,0);
- }
-
- ///////////////////////////////////////////////////////////////////////
- function help_hide()
- {
- FREEZE_MODE = 0;
- msg.VISIBLE = OFF;
- ON_ESC = old_help_esc;
- ON_F1 = old_f1;
- }
-
- function game_help()
- {
- FREEZE_MODE = 1;
- msg.STRING = helptxt_str;
- msg.VISIBLE = ON;
- old_help_esc = ON_ESC;
- ON_ESC = help_hide;
- old_f1 = ON_F1;
- ON_F1 = help_hide;
- }
-
- ///////////////////////////////////////////////////////////////////////
- // menu actions for a standard game
-
- function _menu_load1() { slot = 1; _game_load(); }
- function _menu_load2() { slot = 2; _game_load(); }
- function _menu_load3() { slot = 3; _game_load(); }
- function _menu_load4() { slot = 4; _game_load(); }
- function _menu_load5() { slot = 5; _game_load(); }
-
- function _menu_load()
- {
- menu_txt1.STRING = name1_str;
- menu_txt2.STRING = name2_str;
- menu_txt3.STRING = name3_str;
- menu_txt4.STRING = name4_str;
- menu_txt5.STRING = name5_str;
- menu_txt6.STRING = resume_str;
-
- menu_do1 = _menu_load1;
- menu_do2 = _menu_load2;
- menu_do3 = _menu_load3;
- menu_do4 = _menu_load4;
- menu_do5 = _menu_load5;
- menu_do6 = _menu_clear;
-
- menu_max = 6;
- menu_show();
- }
-
- function game_exit()
- {
- save_status(); // save global skills & strings
- EXIT "3D GameStudio (c) conitec 2001\n";
- }
-
- function exit_yesno()
- {
- yesno_txt.STRING = quit_yesno;
- yesno_do = game_exit;
- yesno_show();
- }
-
- // Desc: default action, to be replaced by a game-adapted action
- function game_init()
- {
- key_init();
- weapon_init();
- main();
- }
-
- // dummy actions, if weapons.wdl or doors.wdl are not included
- function weapon_init() { return; }
- function key_init() { return; }
-
- function menu_main()
- {
- menu_txt1.STRING = new_game_str;
- menu_txt2.STRING = load_game_str;
- menu_txt3.STRING = save_game_str;
- menu_txt4.STRING = quit_game_str;
- menu_txt5.STRING = options_str;
- menu_txt6.STRING = help_str;
- menu_txt7.STRING = resume_str;
-
- menu_do1 = game_init; // normally an action which resets all
- menu_do2 = _menu_load;
- menu_do3 = _menu_save;
- menu_do4 = exit_yesno;
- menu_do5 = game_options;
- menu_do6 = game_help;
- menu_do7 = _menu_clear;
-
- menu_max = 7;
- menu_show();
- }
-
- VAR_INFO _entry = 0; // { TYPE GLOBAL; VAL 0; }
- function game_entry()
- { // mark the score to re-enter the game (yet to do)
- if(_entry == 0)
- {
- _entry = 1;
- }
- }
-
-
- ///////////////////////////////////////////////////////////////////////
- function _game_load()
- {
- msg.STRING = wait_str;
- show_message();
- wait(1); // to display wait message before loading
-
- load(SAVE_NAME,slot);
- msg.STRING = load_error; // failed!
- show_message();
- }
-
- ///////////////////////////////////////////////////////////////////////////////////
- // Desc: switches the mouse on and off
- function mouse_toggle()
- {
- MOUSE_MODE += 2;
- if(MOUSE_MODE > 2)
- { // was it already on?
- MOUSE_MODE = 0; // mouse off
- }
- else
- {
- mouse_on();
- }
- }
-
- // Desc: switches the mouse on
- function mouse_on()
- {
- menu_select.VISIBLE = OFF; // menu now handled by mouse
- MOUSE_MAP = arrow;
- while(MOUSE_MODE > 0)
- {
- MOUSE_POS.X = POINTER.X;
- MOUSE_POS.Y = POINTER.Y;
- wait(1); // now move it over the screen
- }
- }
-
- // Desc: switches the mouse off
- function mouse_off()
- {
- MOUSE_MODE = 0;
- }
-
- //var MOUSE_SPOT[2] = 5,5;
-
- ////////////////////////////////////////////////////////////////////////////
- // For debugging purposes, use the EXECUTE instruction
- // to type in WDL instructions during gameplay, like at a console.
- // You can examine skill values through "TO_STRING look,skill;"
-
- STRING exec_buffer // just an 80-char string
- " ";
- STRING look " "; // to see skills via TO_STRING;
-
- TEXT console_txt
- {
- POS_X 4;
- LAYER 10;
- FONT standard_font;
- STRINGS 3;
- IFDEF CONSOLE_MODE_2;
- STRING "Enter instructions below, abort with [ESC]:";
- IFELSE;
- STRING "Enter instructions below:";
- ENDIF;
- STRING exec_buffer;
- STRING look;
- }
-
- function console()
- {
- if(console_txt.VISIBLE == ON) { RETURN; } //already running
- console_txt.POS_Y = SCREEN_SIZE.Y - 60;
- console_txt.VISIBLE = ON;
- while(console_txt.VISIBLE == ON)
- {
- INKEY exec_buffer;
- if(RESULT == 13)
- {
- EXECUTE exec_buffer;
- IFDEF CONSOLE_MODE_2;
- }
- else
- {
- console_txt.VISIBLE = OFF;
- }
- IFelse;
- }
- console_txt.VISIBLE = OFF;
- ENDIF;
- }
- }
-
- // Implementing a scrolling console, instead of a 1-line one,
- // is left as an exercise to the reader...
-
- //////////////////////////////////////////////////////////////
- // screen resolution display
- //////////////////////////////////////////////////////////////////////
- STRING resolution_str," ";
- STRING screen_str,"Video ";
- STRING x_str,"x";
-
- // Mod Date: 11/1/00 DCP
- // Replaced to_string, add_string, and set_string with
- // str_for_num, str_cat, and str_cpy
- function _show_resolution()
- {
- // compose the resolution string from strings and numbers
- str_cpy(resolution_str,screen_str);
-
- // now it reads "Video "
- str_for_num(temp_str,SCREEN_SIZE.X);
- str_cat(resolution_str,temp_str);
- // now it reads "Video hhhh" (hhhh is the hor resolution)
- str_cat(resolution_str,x_str);
- // now it reads "Video hhhhx"
- str_for_num(temp_str,SCREEN_SIZE.Y);
- str_cat(resolution_str,temp_str);
- // now it reads "Video hhhhxvvvv"
- str_cat(resolution_str,x_str);
- // now it reads "Video hhhhxvvvvx"
- str_for_num(temp_str,VIDEO_DEPTH);
- str_cat(resolution_str,temp_str);
- // and now it reads "Video hhhhxvvvvxdd"
-
- msg.STRING = resolution_str;
- show_message();
- }
-
- function game_resolution()
- {
- _toggle_video();
- _show_resolution();
- }
-
- //////////////////////////////////////////////////////////////////////
- // Default key assignements to control the game
- ON_ESC menu_main;
- ON_F1 game_help;
- ON_F5 game_resolution;
- ON_F10 exit_yesno;
- ON_TAB console;
-
- ON_MOUSE_RIGHT mouse_toggle;